//创建获取用户信息路由处理函数模块

//导入数据库模块
const db = require('../db/index')
//导入bcryptjs
const bcrypt = require('bcryptjs')


//获取用户的基本信息
exports.getUserInfo = (req,res) => {
    // 根据用户的 id，查询用户的基本信息
    // 注意：为了防止用户的密码泄露，需要排除 password 字段
    const sql = 'select id,username,user_pic,nickname,email from ev_users where id = ?'
    //执行sql语句
    //这里的req 对象上的 user 属性  是解析token成功后 express-jwt 中间件帮我们挂载上去的
    db.query(sql,req.user.id,(err,results) => {
        //1.执行sql语句错误
        if (err) return res.cc(err)
        // 2. 执行 SQL 语句成功，但是查询到的数据条数不等于 1
        if (results.length !== 1) return res.cc('获取用户信息失败！')
        //3.将用户信息响应给客户端
        res.send({
            status:0,
            message:'获取用户信息成功! ',   
            data:results[0]
        })
    })
}

//更新用户信息的处理函数模块
/**
 * 
 * @param {Object} req 请求对象
 * @param {Object} res 相应对象
 */
exports.updateUserInfo = (req,res) => {
    //定义更新用户信息的sql语句
    const sql = 'update ev_users set ? where id = ?'
    //使用db.query执行sql语句
    db.query(sql,[req.body,req.body.id],(err,results) => {
        if (err) return res.cc(err)
        //执行sql语句成功,但受影响的行数不为1
        if (results.affectedRows !== 1) return res.cc('更改用户信息失败! ')
        res.cc('修改用户信息成功! ',0)
    })
}
//重置密码的处理函数模块
exports.updatePassword = (req,res) => {
    //实现重置密码的功能
    //定义根据id查询用户信息的sql语句
    const sql = 'select * from ev_users where id = ?'
    db.query(sql,req.user.id,(err,results) => {
        //执行sql语句错误
        if (err) return res.cc(err)
        //执行sql语句正确,检查指定的用户是否存在
        if (results.length !== 1) return res.cc('用户不存在! ')
        //判断提交的旧密码是否正确
        // 在头部区域导入 bcryptjs 后，
        // 即可使用 bcrypt.compareSync(提交的密码，数据库中的密码) 方法验证旧密码是否正确
        // compareSync() 函数的返回值为布尔值，true 表示密码正确，false 表示密码错误
        const compareResult = bcrypt.compareSync(req.body.oldPwd,results[0].password)
        if (!compareResult) return res.cc('原密码错误！')

        //对新密码进行 bcrypt 加密之后，更新到数据库中
        //定义更新数据库中用户密码的sql语句
        const sql = 'update ev_users set password = ? where id = ?'
        //对新密码进行加密
        const newPwd = bcrypt.hashSync(req.body.newPwd,10)
        //执行sql语句
        db.query(sql,[newPwd,req.user.id],(err,results) => {
            if (err) return res.cc(err)
            if (results.affectedRows !== 1) return res.cc('更新密码失败！')
            //更新密码成功
            res.cc('更行密码成功! ',0)
        })
    })
}
//更新用户头像路由的处理函数模块
exports.updateAvatar = (req,res) => {
    //定义更新用户头像的sql语句
    const sql = 'update ev_users set user_pic = ? where id = ?'
    db.query(sql,[req.body.avatar,req.user.id],(err,results) => {
        if (err) return res.cc(err)
        if (results.affectedRows !== 1) return res.cc('更新头像失败！')
        //更新头像成功
        res.cc('更新头像成功！',0)
    })
}